// 文件下载工具函数

/**
 * 下载JSON文件
 * @param {Array|Object} data - 要导出的JSON数据
 * @param {string} fileName - 文件名（不包含.json扩展名）
 * @param {number} delay - 延迟下载的毫秒数，默认0
 * @returns {Promise<void>}
 */
export const downloadJsonFile = (data, fileName, delay = 0) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      try {
        // 确保文件名包含.json扩展名
        const fullFileName = fileName.endsWith('.json') ? fileName : `${fileName}.json`
        
        // 将数据转换为格式化的JSON字符串
        const jsonStr = JSON.stringify(data, null, 2)
        
        // 创建Blob对象
        const blob = new Blob([jsonStr], { type: 'application/json;charset=utf-8' })
        
        // 创建下载链接
        const url = URL.createObjectURL(blob)
        const link = document.createElement('a')
        link.href = url
        link.download = fullFileName
        
        // 模拟点击下载
        document.body.appendChild(link)
        link.click()
        
        // 清理
        setTimeout(() => {
          document.body.removeChild(link)
          URL.revokeObjectURL(url)
          resolve()
        }, 0)
      } catch (error) {
        console.error('下载文件失败:', error)
        resolve()
      }
    }, delay)
  })
}

/**
 * 下载文本文件
 * @param {string} text - 要导出的文本内容
 * @param {string} fileName - 文件名
 * @param {string} mimeType - 文件MIME类型，默认text/plain
 * @param {number} delay - 延迟下载的毫秒数，默认0
 * @returns {Promise<void>}
 */
export const downloadTextFile = (text, fileName, mimeType = 'text/plain', delay = 0) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      try {
        // 创建Blob对象
        const blob = new Blob([text], { type: `${mimeType};charset=utf-8` })
        
        // 创建下载链接
        const url = URL.createObjectURL(blob)
        const link = document.createElement('a')
        link.href = url
        link.download = fileName
        
        // 模拟点击下载
        document.body.appendChild(link)
        link.click()
        
        // 清理
        setTimeout(() => {
          document.body.removeChild(link)
          URL.revokeObjectURL(url)
          resolve()
        }, 0)
      } catch (error) {
        console.error('下载文件失败:', error)
        resolve()
      }
    }, delay)
  })
}

/**
 * 生成带日期范围的文件名
 * @param {string} prefix - 文件名前缀
 * @param {Array} dateRange - 日期范围数组 [startDate, endDate]
 * @param {string} suffix - 文件后缀
 * @returns {string}
 */
export const generateFileNameWithDateRange = (prefix, dateRange, suffix = '.json') => {
  if (dateRange && Array.isArray(dateRange) && dateRange.length === 2) {
    return `${prefix}_${dateRange[0]}_${dateRange[1]}${suffix}`
  }
  return `${prefix}_all${suffix}`
}